﻿Imports Logica
Imports Microsoft.Office.Interop
Imports System.IO
Imports System.Text.RegularExpressions

Public Class ConsultarUsuario
    Private m_identificacion As String

    ''' <summary>
    ''' Crea el control de usuario con los datos del usuario.
    ''' </summary>
    ''' <param name="p_identificacion">Número de identifiación.</param>
    ''' <remarks>Creado Por: Elías Baldioceda, Fecha: 20/06/2010, Modificado: 20/06/2010</remarks>
    Public Sub New(ByVal p_identificacion As String)
        InitializeComponent()

        m_identificacion = p_identificacion
    End Sub

    ''' <summary>
    ''' Carga todos los datos del usuario y los muestra.
    ''' </summary>
    ''' <remarks>Creado Por: Elías Baldioceda, Fecha: 20/06/2010, Modificado: 27/06/2010</remarks>
    Private Sub ConsultarUsuario_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim usuario As Hashtable
        Dim roles As List(Of Hashtable)
        Dim rolesCmb As New List(Of MiComboBox)

        roles = Gestor.rolBuscar()

        For Each rol As Hashtable In roles
            Dim item As MiComboBox

            item = New MiComboBox(rol("descripcion"), rol("id"))
            rolesCmb.Add(item)
        Next

        cmbRol.DisplayMember = "descripcion"
        cmbRol.ValueMember = "valor"
        cmbRol.DataSource = rolesCmb

        Try
            usuario = Gestor.usuarioBuscar(m_identificacion)

            txtNombre.Text = usuario("nombre")
            txtPrimerApellido.Text = usuario("primerApellido")
            txtSegundoApellido.Text = usuario("segundoApellido")
            txtNombreUsuario.Text = usuario("nombreUsuario")
            txtNumeroID.Text = usuario("identificacion")
            txtTelefono.Text = usuario("telefono")
            txtCorreo.Text = usuario("correo")
            cmbTipoID.SelectedItem = usuario("tipoIdentificacion")
            dtpFechaNacimiento.Value = usuario("fechaNacimiento")
            cmbRol.SelectedValue = usuario("rol")
            nudVacaciones.Value = usuario("vacaciones")
            pnlFoto.BackgroundImageLayout = ImageLayout.None
            pnlFoto.BackgroundImage = Gestor.usuarioObtenerFoto(m_identificacion)

            If usuario("genero") = "Masculino" Then
                rdoMasculino.Checked = True
            Else
                rdoMasculino.Checked = False
            End If

            If usuario("estadoCurriculo") Then
                lblActualizarCV.ForeColor = Color.Red
                lblActualizarCV.Text = "Debe actualizar el currículo vitae."
            End If

            ' Permisos
            Dim identificacion As String = Gestor.usuarioActual()("identificacion")

            ' Permiso de asignar bonificación.
            If Not Gestor.usuarioTienePermiso(identificacion, 2) Then
                btnAsignarBonificacion.Enabled = False
            End If

            ' Permiso de consultar liquidación.
            If Not Gestor.usuarioTienePermiso(identificacion, 12) Then
                btnConsultarLiquidacion.Enabled = False
            End If

            ' Permiso de liquidar empleado
            If Not Gestor.usuarioTienePermiso(identificacion, 13) Then
                btnLiquidar.Enabled = False
            End If

            ' Permiso de modificar vacaciones.
            If Not Gestor.usuarioTienePermiso(identificacion, 14) Then
                nudVacaciones.Enabled = False
                btnModificarVacaciones.Enabled = False
            End If

            ' Permiso de modificar usuario
            If Not Gestor.usuarioTienePermiso(identificacion, 16) Then
                txtCorreo.ReadOnly = True
                txtNombre.ReadOnly = True
                txtPrimerApellido.ReadOnly = True
                txtSegundoApellido.ReadOnly = True
                txtTelefono.ReadOnly = True
                dtpFechaNacimiento.Enabled = False
                cmbRol.Enabled = False
                cmbTipoID.Enabled = False
                btnCambiarFoto.Enabled = False
                btnModificar.Enabled = False
                rdoFemenino.Enabled = False
                rdoMasculino.Enabled = False
            End If

            ' Permiso de modificar contraseña.
            If Not Gestor.usuarioTienePermiso(identificacion, 30) Then
                btnModificarContrasenna.Enabled = False
            End If

            ' Permiso de descargar currículo.
            If Not Gestor.usuarioTienePermiso(identificacion, 32) Then
                btnDescargarCurriculo.Enabled = False
            End If
        Catch ex As Exception
            lblError.ForeColor = Color.Red
            lblError.Text = ex.Message
        End Try
    End Sub

    Private Sub btnDescargarCurriculo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDescargarCurriculo.Click
        Dim curriculo As Word.Document
        Dim sf As New SaveFileDialog
        Dim nombre As String
        Dim primerApellido As String
        Dim segundoApellido As String
        Dim datosUsuario As Hashtable


        Try

            curriculo = Gestor.usuarioObtenerCurriculo(Gestor.usuarioActual("identificacion"))
            datosUsuario = Gestor.usuarioBuscar(Gestor.usuarioActual("identificacion"))

            nombre = datosUsuario("nombre")
            primerApellido = datosUsuario("primerApellido")
            segundoApellido = datosUsuario("segundoApellido")
            sf.FileName = "Currículo de " & nombre & " " & primerApellido & " " & segundoApellido & ".docx"
            sf.Filter = ("Documento de Word (*.doc, *.docx)|*.doc;*.docx")

            If sf.ShowDialog() = DialogResult.OK Then
                curriculo.SaveAs(sf.FileName)
                lblError.ForeColor = Color.Green
                lblError.Text = "Documento descargado exitosamente."
                curriculo.Close()
            End If



        Catch es As SqlClient.SqlException When es.Number.Equals(4060)

            lblError.ForeColor = Color.Red
            lblError.Text = "Error de conexión con la base de datos."

        Catch ex As Exception

            lblError.ForeColor = Color.Red
            lblError.Text = "Error al cargar el documento."
        End Try
    End Sub

    ''' <summary>
    ''' Cambia la foto en el panel.
    ''' </summary>
    ''' <remarks>Creado Por: Elías Baldioceda, Fecha: 20/06/2010, Modificado: 20/06/2010</remarks>
    Private Sub btnCambiarFoto_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCambiarFoto.Click
        Dim ofd As New OpenFileDialog
        Dim path As String
        Dim foto As Bitmap

        ofd.Filter = "Imágenes (*.png, *.jpg, *.bmp, *.gif)|*.png;*.jpg;*.bmp;*.gif"
        ofd.Multiselect = False
        ofd.ShowDialog()
        path = ofd.FileName

        foto = Bitmap.FromFile(path)

        If foto.Width > 125 Or foto.Height > 125 Then
            lblError.ForeColor = Color.Red
            lblError.Text = "El tamaño de la imagen no debe ser mayor a 125px de alto ni 125px de ancho."
        Else
            pnlFoto.BackgroundImage = foto
            lblError.ForeColor = Color.Green
            lblError.Text = "Imagen cargada. Este cambio se realiza hasta modificar los datos."
        End If
    End Sub

    ''' <summary>
    ''' Modifica los datos del usuario.
    ''' </summary>
    ''' <remarks>Creado Por: Elías Baldioceda, Fecha: 20/06/2010, Modificado: 20/06/2010</remarks>
    Private Sub btnModificar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnModificar.Click
        Dim foto As Bitmap
        Dim genero As String
        Dim regexCorreo As New Regex("^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$")

        ' Validar los controles de texto.
        For Each control As Control In gbDatosUsuario.Controls
            If TypeOf control Is TextBox Then
                If control.Text.Trim = "" Then
                    control.Focus()
                    lblError.ForeColor = Color.Red
                    lblError.Text = "El campo '" & control.Tag & "' está vacío."
                    Exit Sub
                End If
            End If
        Next

        ' Chequea el formato del correo.
        If Not regexCorreo.IsMatch(txtCorreo.Text) Then
            lblError.ForeColor = Color.Red
            lblError.Text = "El formato del correo ingresado no es válido."
            txtCorreo.Focus()
            Exit Sub
        End If

        If rdoMasculino.Checked Then
            genero = "Masculino"
        Else
            genero = "Femenino"
        End If

        foto = pnlFoto.BackgroundImage

        Try
            Gestor.usuarioModificar(cmbTipoID.SelectedItem, m_identificacion, txtNombre.Text, txtPrimerApellido.Text, txtSegundoApellido.Text, _
                                        genero, dtpFechaNacimiento.Value, txtCorreo.Text, txtTelefono.Text, cmbRol.SelectedValue, foto)
            lblError.ForeColor = Color.Green
            lblError.Text = "Usuario modificado con éxito."
        Catch ex As SqlClient.SqlException
            lblError.ForeColor = Color.Red
            lblError.Text = "Error de conexión."
        Catch ex As Exception
            lblError.ForeColor = Color.Red
            lblError.Text = ex.Message
        End Try
    End Sub

    ''' <summary>
    ''' Consulta los datos de la liquidación del empleado.
    ''' </summary>
    ''' <remarks>Creado Por: Elías Baldioceda, Fecha: 22/06/2010, Modificado: 22/06/2010</remarks>
    Private Sub btnConsultarLiquidacion_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnConsultarLiquidacion.Click
        Dim liquidacion As Hashtable
        Dim mensaje As String

        liquidacion = Gestor.usuarioLiquidacion(m_identificacion)

        mensaje = "Desglose de liquidación:" & vbCrLf
        mensaje &= "Vacaciones: ₡" & liquidacion("vacaciones") & vbCrLf
        mensaje &= "Preaviso: ₡" & liquidacion("preaviso") & vbCrLf
        mensaje &= "Cesantía: ₡" & liquidacion("cesantia") & vbCrLf
        mensaje &= "Aguinaldo: ₡" & liquidacion("aguinaldo") & vbCrLf
        mensaje &= "Total: ₡" & liquidacion("total")

        MsgBox(mensaje, MsgBoxStyle.OkOnly, "Datos de Liquidacón")
    End Sub

    ''' <summary>
    ''' Modifica las vacaciones del usuario.
    ''' </summary>
    ''' <remarks>Creado Por: Elías Baldioceda, Fecha: 23/06/2010, Modificado: 23/06/2010</remarks>
    Private Sub btnModificarVacaciones_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnModificarVacaciones.Click
        Try
            Gestor.usuarioModificarVacaciones(m_identificacion, nudVacaciones.Value)
            lblError.ForeColor = Color.Green
            lblError.Text = "Se modificaron las vacaciones correctamente."
        Catch ex As SqlClient.SqlException
            lblError.ForeColor = Color.Red
            lblError.Text = "Error de conexión."
        Catch ex As Exception
            lblError.ForeColor = Color.Red
            lblError.Text = ex.Message
        End Try
    End Sub

    ''' <summary>
    ''' Muestra la pantalla de modificar bonificación.
    ''' </summary>
    ''' <remarks>Creado Por: Elías Baldioceda, Fecha: 23/06/2010, Modificado: 23/06/2010</remarks>
    Private Sub btnAsignarBonificacion_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAsignarBonificacion.Click
        Dim asignarBonificacion As New AsignarBonificacionGeneral(m_identificacion)
        asignarBonificacion.ShowDialog()
    End Sub

    ''' <summary>
    ''' Liquida un empleado.
    ''' </summary>
    ''' <remarks>Creado Por: Elías Baldioceda, Fecha: 23/06/2010, Modificado: 23/06/2010</remarks>
    Private Sub btnLiquidar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnLiquidar.Click
        Try
            Dim usuarioActual As Hashtable = Gestor.usuarioActual()

            If m_identificacion = usuarioActual("identificacion") Then
                Throw New Exception("No puede liquidar el usuario identificado.")
            End If

            If MsgBox("¿Seguro que desea liquidar al empleado?", MsgBoxStyle.YesNo, "Liquidar") = MsgBoxResult.Yes Then
                Gestor.usuarioLiquidar(m_identificacion)
                Dim usuarios As Usuarios = Me.Parent
                usuarios.tvUsuarios.SelectedNode = usuarios.tvUsuarios.Nodes(0)
            Else
                lblError.Text = ""
            End If
        Catch ex As SqlClient.SqlException
            lblError.ForeColor = Color.Red
            lblError.Text = "Error de conexión."
        Catch ex As Exception
            lblError.ForeColor = Color.Red
            lblError.Text = ex.Message
        End Try
    End Sub

    ''' <summary>
    ''' Vuelve a la pantalla de buscar.
    ''' </summary>
    ''' <remarks>Creado Por: Elías Baldioceda, Fecha: 24/06/2010, Modificado: 24/06/2010</remarks>
    Private Sub btnCancelar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCancelar.Click
        Dim usuarios As Usuarios

        usuarios = Me.Parent
        usuarios.tvUsuarios.SelectedNode = usuarios.tvUsuarios.Nodes("ndBuscar")
    End Sub

    ''' <summary>
    ''' Muestra la pantalla de modificar contraseña.
    ''' </summary>
    ''' <remarks>Creado Por: Elías Baldioceda, Fecha: 29/06/2010, Modificado: 29/06/2010</remarks>
    Private Sub btnModificarContrasenna_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnModificarContrasenna.Click
        Dim modificarContrasenna As New ModificarContrasenna(m_identificacion)

        modificarContrasenna.ShowDialog()
    End Sub
End Class
